package com.example.demo.optional;

import com.example.demo.mode.User;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author pengyifeng
 * @version 5.0
 * @ClassName Test4.java
 * @Description TODO
 * @createTime 2021年01月27日 09:18:00
 */
public class Test4 {
    public static void main(String[] args) {
        List<User> userList=new ArrayList<>();
        User u1=new User();
        u1.setName("lisi");
        User u3=new User();
        u3.setName("asdas");
        User u4=new User();
        u4.setName("111");
        u4.setName("zhangsan");
        userList.add(u1);
        userList.add(u3);
        userList.add(u4);

        String name = userList.stream().filter((o) -> o.getName().equals("zhangsan")).map(User::getName).collect(Collectors.toList()).get(0);
        System.out.println(name);
        //实现集合空判断，如果为空就返回一个新的集合
        //集合中进行筛选非空对象，循环
        //Optional.ofNullable(userList).orElseGet(()->{
        //    return new ArrayList<>();
        //}).stream().filter(o->BeanUtil.isNotEmpty(o)).forEach(o-> System.out.println(o.getName()));

        //Address address=new Address();
        //address.setCity("cd");
        //u1.setAddress(address);
        //orElse(value)：如果optional对象保存的值不是null，则返回原来的值，否则返回value
        //String str = Optional.ofNullable(u2).map(o -> o.getAddress()).map(o -> o.getCity()).orElse("无");
        //System.out.println("测试map:"+str);
        //orElseGet(Supplier supplier)：功能与orElse一样，只不过orElseGet参数是一个对象
        //ifPresent(Consumer consumer)：如果option对象保存的值不是null，则调用consumer对象，否则不调用
        //Optional.ofNullable(u1.getAge()).ifPresent(o2 -> u1.setAge(o2 * 2));
        //System.out.println(u1.getAge());
        //orElseThrow()：值不存在则抛出异常，存在则什么不做，有点类似Guava的Precoditions
        //Optional.ofNullable(u2).orElseThrow(IllegalAccessError::new);
       // Optional.ofNullable(u1).flatMap(o->o.getAddress()).orElseGet("ss");
       // var s="ss";
       // val s11="11";
       // System.out.println(s+s11);
        // filter(Predicate)：判断Optional对象中保存的值是否满足Predicate，并返回新的Optional。
        //Optional<User> user = Optional.ofNullable(u2).filter(o -> o.getName().equals("lisi2"));
        //user.ifPresent(o-> System.out.println(o.getName()));

    }
}
